Python实现基于openCV+百度智能云平台实现《1:N人脸考勤机》文章最后附带源码! |
您所在的位置:网站首页 › open it up百度云 › Python实现基于openCV+百度智能云平台实现《1:N人脸考勤机》文章最后附带源码! |
目录 一、 项目介绍 1.1 项目名称 1.2 项目简介 1.3 项目物料 1.4 技术栈 二、 项目架构 三、项目细节 3.1 环境搭建 3.2 利用opencv实现摄像头调取及相关图像的采集 3.3 利用aips上传图像和结果返回 3.4 结果优化和处理 3.5 可扩展性 3.6 遗留问题和解释 四、声明 一、项目介绍 1.1 项目名称《1:N人脸考勤机》 1.2 项目简介基于windows平台下,使用PyCharmIDE完成开发工作,将提前准备好的照片上传百度云,借助百度aipSDK-Python实现和百度智能云的对接,实现摄像头采集人脸图片后上传百度云,在百度云中利用百度现有的人脸识别算法完成人脸的对比,之后借助SDK返回对比结果,将结果显示在客户端上。 1.3 项目物料 平台:windows开发平台:PyCharm + Anaconda3(选装)开发包:openCV2.4.9(Python)、aips(百度智能云人脸检测的SDK)编程语言:Python其他:识别对象的免冠正面照 1.4 技术栈 网络通信基本知识Python编程语言百度智能云SDK(search函数等)OpenCV基于Python的接口的使用1.5项目架构 上传百度云识别者照片--->图像采集--->图像处理--->上传百度云--->百度云对比--->返回对比结果--->结果处理--->显示结果。 (1)安装PyCharm 1)安装 百度安全验证 创建人脸识别项目及配置pycharm怎么创建新项目-百度经验 (2)安装百度智能云人脸检测的SDK(Python) 1)接口的下载和安装 人脸识别_人脸检测_人脸对比_人脸搜索_活体检测_百度智能云 (3)创建百度智能云应用 1)选择百度云对应功能和免费权限 A、手机应用市场安装“百度”app,注册一个账号,登陆 B、利用百度app扫码登陆以下网址中的账户: 人脸识别私有化部署包_支持百万级超大型人脸库-百度AI开放平台 登陆成功后会返回图一,点击“立即申请”进入以下界面。 创建应用 注意:如果之前安装SDK失败了,这里可以选择直接下载SDK即可,选择其中的“Python Http SDK”即可。 创建组这个就是上边创建的应用。我们开始创建组。 点击确认 点击画圈的地方(组名) 这就是创建组内用户的菜单,点击任何一个方框都可以。 上传识别的对比资源创建组和组用户均完成,到时候百度云会自动找到要求的组,在组中对比符合要求的用户,反馈结果。 将其中的内容(AK和SK)复制出来保存好(保存在一个文本文档内即可,文档一定要保留好) 关于opencv如何下载,作者在这里作为伏笔,大家自行尝试,有问题试着解决一下哦。解决不了记得评论哦。 3.2 利用opencv实现摄像头调取及相关图像的处理其中有详细的注释,请仔细阅读,如果有不明白的地方,评论区留言,作者一一回复。 3.3 利用aips上传图像和结果返回 图片为多张,注意通过行号来看,避免少看代码 3.4 结果优化和处理在屏幕显示结果: 在上边的92行位置加入如下代码: 注意通过行号来判断对齐缩进的位置,避免代码从属问题。 3.5 效果展示如遇闪退,可以优化,可以找找看是什么问题。由于账号隐私问题,隐藏APP_ID\AK\SK三个参数。 源码: # coding: utf-8 # author: alex_chen import cv2 as cv from aip import AipFace # 创建百度智能云客户端client from aip.face import base64 # 调取图片格式转换工具 import time def main(): cap = cv.VideoCapture() cap.open(0) # 打开摄像头 # 登陆百度智能云: APP_ID = 'xxxxxxxx' API_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxx' SECRET_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx' # 创建自已百度云应用的客户端,账号密码确定接入的是百度云的“人脸考勤”应用 client = AipFace(APP_ID, API_KEY, SECRET_KEY) # 创建haar分类器: cf = cv.CascadeClassifier( r"D:\anaconda3\envs\ml_dl\Lib\site-packages\haarcascades\haarcascade_frontalface_alt2.xml") while cap.isOpened(): flag, frame = cap.read() # 获取摄像头截取到的图片 img = frame # 保留彩色原图frame gray_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY) # 灰度处理 # cv.equalizeHist(gray_img,gray_img) # 直方图均衡化:这个可以不要,处理效果更好 # 寻找特征(人脸)矩阵: allFaceRect = cf.detectMultiScale(gray_img,) #得到的视频中出现的所有的人脸,并且保存在numpy.ndarray中(矩形向量组) # print(type(allFaceRect[0])) # 图片中的第一张人脸# 没有脸的时候,返回() # 矩形跟随人脸样本来绘图: if allFaceRect is not (): x,y,w,h = allFaceRect[0] # 第一张人脸标识出来 cv.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 255)) # for x, y, w, h in allFaceRect: # 标识出所有人脸 # cv.rectangle(gray_img, (x, y), (x + w, y + h), (255, 255, 255)) # 在每张图片中找到人脸并标注正方形 # 至此,找到了人脸,将人脸存放在一个容器face_img当中: face_img = gray_img[y:y+w,x:x+h] # 将第一张人脸保存下来 check_result,img_encode = cv.imencode(".jpg", face_img) # 将找到的人脸进行编码存入缓存img_encode中。 # print(type(img_encode),img_encode) # 查看在内存中的图片的数据类型。 # 测试缓存中是否保存成功了: # res = cv.imdecode(img_encode,1) # cv.imshow("demo",res) # 人脸搜索 # 1、将缓存区的图片img_encode转换为base64格式且返回处理后的图片: base64img_send_to_aiServer = base64.b64encode(img_encode) # 2、调用search() # 注意:search()函数的第一个参数是字符串!需要把base64的字节序转换成字符串 res = client.search(bytes.decode(base64img_send_to_aiServer), "BASE64", "Teacher") # print(res,type(res)) # 得到处理的结果 # 返回的是一个字典类型。 # 带参options:client.search(image, imageType, groupIdList, options) ----不用 # imageType参数的值: # 图片类型 BASE64:图片的base64值,base64编码后的图片数据,编码后的图片大小不超过2M;---选择这个,将图片进行base64编码 # URL:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长); # FACE_TOKEN: 人脸图片的唯一标识,调用人脸检测接口时,会为每个人脸图片赋予一个唯一的FACE_TOKEN,同一张图片多次检测得到的FACE_TOKEN是同一个 # groupIdList参数: 人脸分组的序号,通过序号选择对应的组,如果要在多个组之间选择,则用逗号分隔序号 # res_json:返回的是找到的人脸的相关信息(结果),格式json: # { # "face_token": "fid", # "user_list": [ 返回的所有找到的用户的列表 # { # "group_id": "test1", # "user_id": "u333333", # "user_info": "Test User", # "score": 99.3 人脸匹配度(低于80即搜索失败) # } 每个用户都有这四个数据,多个user用逗号分隔 # ] # } ''' { 'error_code': 0, 'error_msg': 'SUCCESS', 'log_id': 2253051395, 'timestamp': 1667464653, 'cached': 0, 'result': { 'face_token': '551d377ffeb0d24fed5b9dc07885203c', 'user_list': [ { 'group_id': 'Teacher', 'user_id': 'ChenBingXu', 'user_info': '', 'score': 97.605316162109 } ] } } ''' if 'result' in res.keys(): print(res['result']) name = res['result']['user_list'][0]['user_id'] #从数据中拿到返回的人脸匹配的姓名name current_time = time.strftime("%Y.%m.%d %H:%M:%S",time.localtime(time.time())) # 获取系统时间 print(name,current_time) cv.putText(frame,str(name)+" "+str(current_time),(0,50),cv.FONT_HERSHEY_SIMPLEX, 0.75, (255, 255, 255), 2) # 显示灰度图 cv.imshow("demo", frame) key_pressed = cv.waitKey(5) # 按ESC退出: if key_pressed == 27: break # 关闭摄像头: cap.release() # 关闭窗口: cv.destroyAllWindows() if __name__ == '__main__': main() # 调用主函数 # print(cv.__file__) # 打印库位置,将haarcascade训练器样板导入 四、声明仅供教学和个人学习爱好者作为基础入门材料使用,项目中内容不涉及任何企业及个人保密成分,不可用于商业用途,特此声明!如有盗版等问题必追究其法律责任,严禁抄袭剽窃等行为。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |